package com.koron.common.core.interceptor;

import com.koron.bean.enums.OperationMode;

import java.lang.reflect.Field;

/**
 * 给fields()中的字段名设置默认值defaultValue()
 *
 * @author jzp
 * @since 2021/9/26
 */
public interface FieldAdapter {
    /**
     * 一般来说，只需要实现defaultValue()即可
     * 如果需要自定义设置，可以重写这个方法
     */
    default void handler(Object parameter, Field field) throws IllegalAccessException {
        // 只有值为null才设置
        if (field.get(parameter) == null) {
            field.set(parameter, defaultValue());
        }
    }

    /**
     * 给字段设置默认值
     *
     * @return 默认值
     */
    Object defaultValue();

    /**
     * 操作模式
     * 如果@FillField指定了，此方法作废
     */
    OperationMode getOperationMode();

    /**
     * 该适配器对应的字段名，可以有多个
     */
    String[] fields();
}
